package com.nidu.demo.user.gateway;

import com.nidu.demo.user.model.UserDepartment;

import java.util.Set;
import java.util.List;
import java.util.Map;

/**
 * 用户-部门绑定关系网关接口
 * 提供领域层访问组织关系的抽象能力
 */
public interface UserDepartmentGateway {

    /**
     * 绑定用户到多个部门（新增绑定）
     */
    void bindUserDepts(Long userId, Set<Long> deptIds);

    /**
     * 重新绑定用户部门关系（覆盖原有关系）
     */
    void rebindUserDepts(Long userId, Set<Long> deptIds);

    /**
     * 移除用户的所有部门绑定关系
     */
    void removeUserDepts(Long userId);

    /**
     * 移除部门的所有用户绑定关系
     */
    void removeDeptUsers(Long deptId);

    /**
     * 移除用户列表下的所有部门绑定关系
     */
    void removeUsersDepts(Set<Long> userId);

    /**
     * 移除部门列表下的所有用户绑定关系
     */
    void removeDeptsUsers(Set<Long> deptIds);

    /**
     * 查询用户所属的部门ID列表
     */
    Set<Long> getDeptIdsByUserId(Long userId);

    /**
     * 查询部门下所有用户ID列表
     */
    Set<Long> getUserIdsByDeptId(Long deptId);

    /**
     * 查询用户拥有的角色列表
     */
    Map<Long, List<UserDepartment>> getByUserIds(Set<Long> userIds);

    /**
     * 查询角色下绑定的所有用户列表
     */
    Map<Long, List<UserDepartment>> getByDeptIds(Set<Long> deptIds);

    /**
     * 查询角色下绑定的所有用户ID列表
     * @param deptIds
     * @return
     */
    Set<Long> getUserIdsByDeptIds(Set<Long> deptIds);
}
